C/Visual C - sobrecarga de <<

 
Vista:

sobrecarga de <<

Publicado por Oscar (5 intervenciones) el 27/06/2005 21:08:05
hola

habran usado el
cout << "hola" << 3 << endl;
lo que quiero es que en lugar del cout, el flujo ostream vaya dirijo a mi objeto, es decir:
myobjeto << "hola << 3 << endl
de modo qe pueda procesar las cadenas, numeros y otros.

Como puedo hacer hacer esto??
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:sobrecarga de <<

Publicado por fernando.gomez (1603 intervenciones) el 27/06/2005 22:49:27
cout es una instancia de std::ostream. Así:

ostream f;
// inicializar f
f << "hola" << 3 << endl;

Cualquier clase derivada de ostream te servirá, como por ejemplo, ofstream:

ofstream archivo("miarchivo.txt");
archivo << "esto se escribirá en el archivo de texo: " << 5 << endl;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:sobrecarga de <<

Publicado por Oscar (5 intervenciones) el 28/06/2005 18:07:21
Fernando

ok, creo mi objeto derivado del ostream, y ahora como le hago para recoger los datos enviados en el stream? la idea es que mi "objeto" tipo cout sea un filtro, eliminando ciertas palabras y numero. Debo sobrecargar los operadores << ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:sobrecarga de <<

Publicado por fernando.gomez (1603 intervenciones) el 28/06/2005 19:17:23
Así es, debes sobrecargar dichos operadores. También puedes crear funciones amigas de ostream que tomen como parámetro un ostream y regrese una referencia a ostream. Por ejemplo:

ostream& filtro(ostream& strm)
{
// aquí manipulas el flujo, digamos, para filtrar palabras...
};

Entonces mandarías llamar a filtro como lo haces con endl o hex:

cout << filtro << "hola esto es para probar el filtro " << 5 << true;

De esta última forma ya no tendrías que derivar de ostream ni sobrecargar sus operadores de desplazamiento de bits.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:sobrecarga de <<

Publicado por Oscar (1 intervención) el 29/06/2005 19:28:41
Excelente Fernando, solo es que quisiera que se use necesariamente mi objeto en lugar del cout, hice lo siguiente para probar:

class MYobj {
...
public:
void operator << (ostream& strm);
};

void MYobj::operator << (ostream& strm){
cout << strm;
}

y en el main:

MYobj myCout;
myCout << "hola";

y retorna lo siguiente:
main.cpp:15: error: no match for 'operator<<' in 'myCout << "hola"'
MYobj.h:10: error: candidates are: void MYobj::operator<<(std::ostream&)

y si derivo mi objeto del ostream, me da otros errores, entonces como?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:sobrecarga de <<

Publicado por King (3 intervenciones) el 29/06/2005 21:32:44
Hola:

Yo casi siempre los declaro como metodos friend:

friend ostream& operator <<(ostream &out, MyObj rhs)
{
out << "hola";
out << rhs.getName();
return out;
}

Recuerda que la sobrecarga de este operador en particular obtiene el objeto de salida estandard (ostream), lo usa y despues tiene que regresarlo al flujo normal del programa... por lo que si usas la siguiente firma:

void MYobj::operator << (ostream& strm){
cout << strm

estas regresando un VOID, y no una referencia al ostream&

Espero que te haya servido, cualquier duda no dudes en preguntar

Saludos

King

http://www.novacreations.net/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:sobrecarga de <<

Publicado por Oscar (5 intervenciones) el 29/06/2005 22:32:54
King, tu sobrecarga funciona, pero lo que haces es que el stream acepte tu objeto, o sea:

out << "hola" << myObjeto << endl;

siendo out un stream, esto si es que no me equivoco.
Pero lo que deseo es que "out" sea mi objeto, es decir:

myObjeto << "hola" << 5 << endl;

y que el stream sea procesado por mi objeto, como?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:sobrecarga de <<

Publicado por King (3 intervenciones) el 30/06/2005 02:12:56
Hola:

Ah mira, interesante. Pues lo que puedes hacer es que tu clase herede de alguna de las clases stream de la std, para mayor facilidad, pues el ostream =)

tengo curiosidad... para que lo necesitas de esa forma?

King

http://www.novacreations.net/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:sobrecarga de <<

Publicado por Oscar (5 intervenciones) el 02/07/2005 18:40:28
hola King

pues mira, la idea es que el objeto me pueda filtrar la informacion hacia una rachivo de texto, es decir que cierto tipo de informacion vaya a un archivo X y otro tipo a un archivo Y, etc. la idea de Fernando: excelente, pero no se adecua lo que yo quiero.

he intentado heredar del ostream pero me sale errores que si no me equivoco son en la parte del constructor, la idea que tenia es sobrecargar el operador << asi:

void myObjeto::operator << (mystream &ostream)

y me debiera aceptar:

myObjeto << "hola mundo" << 5 << "termina";

suponiendqoe que el uitimo << me retorne una refrencia ostream, pero nada, no he logrado hacerlo hasta ahora, me falta algo.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar